package modelo;

import java.io.Serializable;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Table;
import javax.persistence.Transient;

/**
 * La Clase DetalleCarro representa a un detalle de carro en esta tienda
 * virtual.
 * 
 * Ademas es una entidad JPA que mapea un registro de la tabla DetalleCarro
 * desde la BD.
 * 
 * @author Franco Camilo Gonzalez Chaparro.
 */
@Entity
@Table(name = "detalle_carro")
public class DetalleCarro implements Serializable {
    /**
     * variable usada para guardar la version de la clase para la
     * serializacion.
     */
    private static final long serialVersionUID = 1L;
    /**
     * El atributo idDetalle es la identificacion unica de un detalle de carro
     * .
     */
    @Id
    @Column(name = "ID_DETALLE")
    @GeneratedValue
    private int idDetalle;
    /**
     * El atributo idCarro el que establece la relacion con la clase carro.
     */
    @ManyToOne
    @JoinColumn(name = "ID_CARRO")
    private Carro idCarro;

    /**
     * El atributo producto es el producto que se compro en la tienda y fue
     * agregado al carro.
     */
    @Transient
    private Producto producto;

    /**
     * El atributo idProducto es la identificacion unica de un producto.
     */
    @Column(name = "ID_PRODUCTO")
    private String idProducto;

    /**
     * El atributo cantidad es la cantidad de un producto que se tiene dentro
     * de un carro.
     */
    @Column(name = "CANTIDAD")
    private int cantidad;

    /**
     * Constructor por defecto de la Clase DetalleCarro.
     */
    public DetalleCarro() {
        super();
    }

    /**
     * Constructor de la Clase DetalleCarro.
     * 
     * @param idCarro
     *            es la identificacion unica de un carro.
     * @param idProducto
     *            es la identificacion unica de un producto.
     * @param cantidad
     *            es la cantidad de un producto que se tiene dentro de un
     *            carro.
     */
    public DetalleCarro(Carro idCarro, String idProducto, int cantidad) {
        super();
        this.idCarro = idCarro;
        this.idProducto = idProducto;
        this.cantidad = cantidad;
    }

    /**
     * Permite obtener el valor del atributo idDetalle.
     * 
     * @return el valor de idDetalle.
     */
    public int getIdDetalle() {
        return idDetalle;
    }

    /**
     * Permite establecer el valor del atributo idDetalle.
     * 
     * @param idDetalle
     *            contiene el nuevo valor para el atributo idDetalle.
     */
    public void setIdDetalle(int idDetalle) {
        this.idDetalle = idDetalle;
    }

    /**
     * Permite obtener el valor del atributo idCarro.
     * 
     * @return el valor de idCarro.
     */
    public Carro getIdCarro() {
        return idCarro;
    }

    /**
     * Permite establecer el valor del atributo idCarro.
     * 
     * @param idCarro
     *            contiene el nuevo valor para el atributo idCarro.
     */
    public void setIdCarro(Carro idCarro) {
        this.idCarro = idCarro;
    }

    /**
     * Permite obtener el valor del atributo producto.
     * 
     * @return el valor de producto.
     */
    public Producto getProducto() {
        return producto;
    }

    /**
     * Permite establecer el valor del atributo producto.
     * 
     * @param producto
     *            contiene el nuevo valor para el atributo producto.
     */
    public void setProducto(Producto producto) {
        this.producto = producto;
    }

    /**
     * Permite obtener el valor del atributo idProducto.
     * 
     * @return el valor de idProducto.
     */
    public String getIdProducto() {
        return idProducto;
    }

    /**
     * Permite establecer el valor del atributo idProducto.
     * 
     * @param idProducto
     *            contiene el nuevo valor para el atributo idProducto.
     */
    public void setIdProducto(String idProducto) {
        this.idProducto = idProducto;
    }

    /**
     * Permite obtener el valor del atributo cantidad.
     * 
     * @return el valor de cantidad.
     */
    public int getCantidad() {
        return cantidad;
    }

    /**
     * Permite establecer el valor del atributo cantidad.
     * 
     * @param cantidad
     *            contiene el nuevo valor para el atributo cantidad.
     */
    public void setCantidad(int cantidad) {
        this.cantidad = cantidad;
    }

}
